home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
vol_100
/
148_01
/
a99tbls.csm
< prev
next >
Wrap
Text File
|
1987-09-26
|
11KB
|
579 lines
;TITLE MACHINE LANGUAGE FUNCTIONS FOR THE 990 SERIES CROSS-ASSEMBLER V. 1.0
; SUBTTL DIRECTORY
;
; TMS9900/99105 FAMILY CROSS-ASSEMBLER V. 1.0
;
; JANUARY, 1984
;
; ORIGINAL 6800 VERSION BY WILLIAM C. COLLEY, III.
; UPDATED 9900/99105 VERSION BY ALEXANDER CAMERON.
;
;FILE: A99TBLS.CSM
;
;MACHINE LANGUAGE FUNCTIONS.
;
;
;
;THIS FUNCTION GETS OPCODE NUMBER NUM FROM THE OPCODE TABLE. THE FUNCTION
;RETURNS 0 IF THE OPCODE WAS NOT FOUND, 1 IF IT WAS.
;
;FUNCTION IS CALLED AS FOLLOWS:
;
; GETOPC(NUM,OPCODE,VALUE,ATTRIB);
;
; NUM CHARACTER CONTAINING THE NUMBER OF THE DESIRED ENTRY.
; 0 REPRESENTS THE FIRST ENTRY IN THE TABLE. THE
; TABLE IS IN ALPHABETICAL ORDER FOR THE BENEFIT
; OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
; OPCODE POINTER TO A 5-CHARACTER ARRAY WHICH WILL RECEIVE THE
; OPCODE'S NAME (NULL TERMINATED).
; VALUE POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
; VALUE.
; ATTRIB POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
; ATTIBUTE BYTE.
;
INCLUDE A99BDS.LIB
FUNCTION GETOPC
NUM EQU ARG1
OPCODE EQU ARG2
VALUE EQU ARG3
ATTRIB1 EQU ARG4
;
CALL ARGHAK
LDA NUM ;GET ENTRY NUMBER.
CPI OPTBLL ;ENTRY IN TABLE?
LXI H, 0 ;IF NOT, RETURN 0.
RNC
;
PUSH B ;IF SO, WE'RE GOING TO HAVE TO DO SOME
PUSH D ;SERIOUS CRUNCHING.
;
MOV L,A ;FIND ENTRY BY COMPUTING
DAD H ;(N * NUM) + TABLE BASE.
MOV C,L
MOV B,H
DAD H
DAD B ;N=6
; DAD B ;N=8
MOV C,A ;BC=NUM
MVI B,0
DAD B ;7*NUM
LXI B,OPCTBL
DAD B
MOV C,L
MOV B,H
INX H ;ALSO COMPUTE POSITION OF ARGUMENTS.
INX H
INX H
INX H
PUSH H
;
MVI E, 4 ;MOVE OPCODE OUT TO RETURN AREA.
LHLD OPCODE
MOVOPC: LDAX B
CPI ' '
JZ ENDOPC
INX B
MOV M,A
INX H
DCR E
JNZ MOVOPC
;
ENDOPC: MVI M, 0 ;TERMINATE OPCODE.
;
LHLD ATTRIB1 ;MOVE ATTRIBUTE BYTE OUT TO RETURN AREA.
POP B
LDAX B
INX B
MOV M,A
LHLD VALUE ;MOVE VALUE BYTE OUT TO RETURN AREA.
LDAX B
INX B
MOV M,A
INX H
LDAX B
MOV M,A
LXI H, 1 ;RETURN 1 FOR SUCCESSFUL GET.
POP D
POP B
RET
;
;THE OPCODE TABLE ITSELF:
;
; EACH ENTRY HAS A THREE-BYTE NAME, A ONE-BYTE ATTRIBUTE,
; AND A TWO-BYTE BASIC OPCODE VALUE AS DEFINED IN THE 990 SERIES
; HANDBOOKS.
;
; THE ATTRIBUTE BYTE BITS ARE ALLOCATED AS FOLLOWS:
;
; 7 = SET IF PSEUDO-OP.
; 6 = SET IF PSEUDO-OP AND NO LABEL IS ALLOWED
; 5,4,3 REPRESENT OPCODE 2ND ADDRESSING MODE IF PRESENT
; 2,1,0 " " 1ST " " " "
;
; NOTES. FOR FURTHER INFORMATION ON HOW THE ADDRESSING ATTRIBUTE
; BITS ARE DERIVED FOR EACH INSTRUCTION REFER TO THE MANUAL.
; SECTION 1.4.
;
;
OPCTBL0 EQU $
;
OPCTBL DB 'A ',09H ;MNEMONIC FOLLOWED BY ATTRRIBUTE BYTE
DW 0A000H ;BASIC OPCODE VALUE
DB 'AB ',09H
DW 0B000H
DB 'ABS ',01H
DW 0740H
DB 'AI ', 35H
DW 0220H
DB 'ANDI', 35H
DW 0240H
DB 'AORG',80H
DW 0000H
DB 'B ',01H
DW 0440H
DB 'BIND',01H ;TMS99000 INSTRUCTION
DW 0140H
DB 'BL ',01H
DW 0680H
DB 'BLSK',35H ;TMS99000 INSTRUCTION
DW 00B0H
DB 'BLWP',01H
DW 0400H
DB 'BSS ', 80H
DW 0005H
DB 'BYTE', 80H
DW 0002H
DB 'C ', 09H
DW 8000H
DB 'CB ', 09H
DW 9000H
DB 'CI ',35H
DW 0280H
DB 'CKOF',00H
DW 03C0H
DB 'CKON',00H
DW 03A0H
DB 'CLR ',01H
DW 04C0H
DB 'COC ',19H
DW 2000H
DB 'CZC ',19H
DW 2400H
DB 'DEC ',01H
DW 0600H
DB 'DECT',01H
DW 0640H
DB 'DIV ',19H
DW 3C00H
DB 'DIVS',01H ;TMS99000 INSTRUCTION
DW 0180H
DB 'DXOP',0C0H ; Define Extended Operation
DW 000CH
DB 'ELSE',0C0H
DW 0007H
DB 'END ',80H
DW 0006H
DB 'ENDI',0C0H
DW 0008H
DB 'EQU ',80H
DW 0001H
DB 'EVEN',80H
DW 000BH
DB 'IDLE',00H
DW 0340H
DB 'IF ',0C0H
DW 0009H
DB 'INC ',01H
DW 0580H
DB 'INCT',01H
DW 05C0H
DB 'INV ',01H
DW 0540H
DB 'JEQ ',02H
DW 1300H
DB 'JGT ',02H
DW 1500H
DB 'JH ',02H
DW 1B00H
DB 'JHE ',02H
DW 1400H
DB 'JL ',02H
DW 1A00H
DB 'JLE ',02H
DW 1200H
DB 'JLT ',02H
DW 1100H
DB 'JMP ',02H
DW 1000H
DB 'JNC ',02H
DW 1700H
DB 'JNE ',02H
DW 1600H
DB 'JNO ',02H
DW 1900H
DB 'JOC ',02H
DW 1800H
DB 'JOP ',02H
DW 1C00H
DB 'LDCR',19H
DW 3000H
DB 'LI ',35H
DW 0200H
DB 'LIMI',06H
DW 0300H
DB 'LREX',00H
DW 03E0H
DB 'LST ',05H ;TMS99000 INSTRUCTION
DW 0080H
DB 'LWP ',05H ;TMS99000 INSTRUCTION
DW 0090H
DB 'LWPI',06H
DW 02E0H
DB 'MOV ',09H
DW 0C000H
DB 'MOVB',09H
DW 0D000H
DB 'MPY ',19H
DW 3800H
DB 'MPYS',01H ;TMS99000 INSTRUCTION
DW 01C0H
DB 'NEG ',01H
DW 0500H
DB 'NOP ',00H
DW 1000H
DB 'ORI ',35H
DW 0260H
DB 'RSET',00H
DW 0360H
DB 'RT ',00H
DW 045BH
DB 'RTWP',00H
DW 0380H
DB 'S ',09H
DW 6000H
DB 'SB ',09H
DW 7000H
DB 'SBO ',04H
DW 1D00H
DB 'SBZ ',04H
DW 1E00H
DB 'SET ',80H
DW 000AH
DB 'SETO',01H
DW 0700H
DB 'SLA ',2DH
DW 0A00H
DB 'SOC ',09H
DW 0E000H
DB 'SOCB',09H
DW 0F000H
DB 'SRA ',2DH
DW 0800H
DB 'SRC ',2DH
DW 0B00H
DB 'SRL ',2DH
DW 0900H
DB 'STCR',09H
DW 3400H
DB 'STST',05H
DW 02C0H
DB 'STWP',05H
DW 02A0H
DB 'SWPB',01H
DW 06C0H
DB 'SZC ',09H
DW 4000H
DB 'SZCB',09H
DW 5000H
DB 'TB ',04H
DW 1F00H
DB 'TCMB',07H ;TMS99105 INSTRUCTION
DW 0C0AH
DB 'TEXT', 80H
DW 0004H
DB 'TMB ',07H ;TMS99105 INSTRUCTION
DW 0C09H
DB 'TROF',00H
DW 03C0H
DB 'TRON',00H
DW 03E0H
DB 'TSMB',07H ;TMS99105 INSTRUCTION
DW 0C0BH
DB 'WORD',80H
DW 0003H
DB 'WREN',00H
DW 03A0H
DB 'X ',01H
DW 0480H
DB 'XOP ',19H
DW 2C00H
DB 'XOR ',19H
DW 2800H
;
OPTBLL EQU ($-OPCTBL0)/7 ;CALCULATE LENGTH OF TABLE.
;
ENDFUNCTION getopc
;
; SUBTTL FUNCTION 2 -- GETS THE NUMBER OF OPCODES IN THE OPCODE TABLE
; PAGE
;
;THIS FUNCTION RETURNS THE NUMBER OF OPCODES IN THE OPCODE TABLE
;FOR THE BENEFIT OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
;
;THIS FUNCTION IS CALLED AS FOLLOWS:
;
; NUMOPCS();
;
FUNCTION numopcs
LXI H,OPTBLL ;RETURN NUMBER OF OPCODES
RET
ENDFUNCTION numopcs
;
;
;;
; SUBTTL FUNCTION 3 -- GETS THE ATTRIBUTE BYTE OF AN ASCII CHARACTER
; PAGE
;
;THIS FUNCTION REMOVES THE PARITY BIT FROM ITS ARGUMENT AND LOOKS IT UP IN
;A TABLE. THE TABLE CLASSIFIES THE CHARACTER INTO ONE OF THE FOLLOWING BINS
;RETURNING THE APPROPRIATE CODE.
;
ALPHA EQU 0 ;ALPHABETIC.
NUMERC EQU 1 ;NUMERIC (0-9).
ENDLIN EQU 2 ;END OF LINE MARKERS (CR ;).
COMMA EQU 3 ;FIELD SEPARATORS (,).
OPERAT EQU 4 ;OPERATORS (* + / - > < = ( )).
BASDES EQU 5 ;BASE DESIGNATORS (# %).
QUOTE EQU 6 ;STRING DELIMITERS (' ").
BLANK EQU 10 ;WHITE SPACE CHARACTER (SPC TAB).
TRASH EQU 11 ;OTHER CONTROL CHARACTERS.
;
;THE FUNCTION IS CALLED AS FOLLOWS:
;
; GETATTR(BYTE);
;
; BYTE CHARACTER VALUE TO BE LOOKED UP.
;
BLOCK MACRO VALU,SIZE
REPT SIZE
DB VALU
ENDM
ENDM
;
;
FUNCTION getattr
CALL MA1TOH
ANI 7FH ;STRIP PARTIY BIT
;
LXI H,ATTTBL ;INDEX INTO TABLE
ADD L
MOV L,A
MVI A, 0
ADC H
MOV H,A
;
MOV L,M ;RETURN RESULT.
MVI H, 0
RET
;
;ATTRIBUTE TABLE ITSELF:
;
;
ATTTBL: BLOCK TRASH,9 ; ^@ THRU ^H
DB BLANK ; TAB
DB ENDLIN ; LF
DB TRASH ; ^K
DB TRASH ; FF
DB TRASH ; CR
BLOCK TRASH,18 ; ALL OTHER CONTROL CHARACTERS
DB BLANK ;SPC
DB ALPHA ; !
DB QUOTE ; "
DB BASDES ; #
DB OPERAT ; $
DB BASDES ; %
DB ALPHA ; &
DB QUOTE ; '
DB OPERAT ; (
DB OPERAT ; )
DB OPERAT ; *
DB OPERAT ; +
DB COMMA ; ,
DB OPERAT ; -
DB ALPHA ; .
DB OPERAT ; /
BLOCK NUMERC,10 ; 0 THRU 9
DB ALPHA ; :
DB ENDLIN ; ;
DB OPERAT ; <
DB OPERAT ; =
DB OPERAT ; >
DB ALPHA ; ?
DB OPERAT ; @
BLOCK ALPHA,26 ; A THRU Z
DB ALPHA ; [
DB ALPHA ; \
DB ALPHA ; ]
DB ALPHA ; ^
DB ALPHA ; _
DB ALPHA ; `
BLOCK ALPHA,26 ; SMALL A THRU SMALL Z
DB ALPHA ; {
DB ALPHA ; |
DB ALPHA ; }
DB ALPHA ; ~
DB TRASH ; RUB
;
ENDFUNCTION getattr
;
; SUBTTL FUNCTION 4 -- GETS AN OPERATOR FROM THE OPERATOR TABLE
; PAGE
;
;THIS FUNCTION GETS OPERATOR NUMBER NUM FROM THE OPERATOR TABLE. THE FUNCTION
;RETURNS 0 IF THE OPERATOR WAS NOT FOUND, 1 IF IT WAS.
;
;FUNCTION IS CALLED AS FOLLOWS:
;
; GETOPR(NUM,OPRATR,BS,TOKEN);
;
; NUM CHA